﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;

namespace projetoFinal
{
    public class operaChamado
    {
        public static List<chamado> listar(string field, string value, int crit)
        {
            List<chamado> listChamado = new List<chamado>();
            string strSQL = string.Empty;

            if (field.Equals(""))
            {
                strSQL = "select * from chamado";
            }
            else
            {
                strSQL = DAOHelper.sqlQueryBuilder("chamado", field, value, crit);
            }
            using (IDataReader dr = DAOHelper.executeQuery(strSQL))
            {
                while (dr.Read())
                {
                    associadoCarro objAssociadoCarro = operaAssociadoCarro.buscar(Int64.Parse(dr["codAssociadoCarro"].ToString()));
                    tipoProblema objTipoProblema = operaTipoProblema.buscar(Int64.Parse(dr["codTipoProblema"].ToString()));
                    tipoServico objTipoServico = null;
                    if(dr["codTipoServico"] != DBNull.Value) {
                        objTipoServico = operaTipoServico.buscar(Int64.Parse(dr["codTipoServico"].ToString()));
                    }
                    prestadorServico objPrestador = operaPrestadorServico.buscar(Int64.Parse(dr["codPrestadorServico"].ToString()));
                    seguradora objSeguradora = null;
                    if (dr["codCadastro"] != DBNull.Value)
                    {
                        objSeguradora = operaSeguradora.buscar(Int64.Parse(dr["codCadastro"].ToString()));
                    }

                    chamado objChamado = new chamado(Int64.Parse(dr["codChamado"].ToString()), objAssociadoCarro.Associado, objAssociadoCarro, objTipoProblema, objTipoServico, dr["numChamado"].ToString(), (statusChamado)int.Parse(dr["status"].ToString()));
                    objChamado.Cidade = dr["cidade"].ToString();
                    objChamado.Descricao = dr["descricao"].ToString().Replace("<br />", System.Environment.NewLine);
                    objChamado.Endereco = dr["endereco"].ToString();
                    objChamado.Prestador = objPrestador;
                    objChamado.Seguradora = objSeguradora;
                    objChamado.Uf = dr["uf"].ToString();
                    objChamado.DataCad = DateTime.Parse(dr["dataCad"].ToString());
                    
                    listChamado.Add(objChamado);
                }
            }
            return listChamado;
        }
        public static int incluir(chamado objChamado)
        {
            objChamado.NumChamado = proxNumChamado();

            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" INSERT INTO ");
            strSQL.Append(" chamado ");
            strSQL.Append(" ( ");
            strSQL.Append("     codAssociado, codTipoProblema, codTipoServico, codAssociadoCarro, numChamado, endereco, numero, uf, cidade, descricao, codCadastro, codPrestadorServico, datacad, status ");
            strSQL.Append(" ) ");
            strSQL.Append(" VALUES ");
            strSQL.Append(" ( ");
            strSQL.AppendFormat(" {0} ", "'" + objChamado.Associado.CodAssociado + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.TipoProblema.CodTipoProblema + "'");
            if (objChamado.TipoServico != null)
            {
                strSQL.AppendFormat(" , {0} ", "'" + objChamado.TipoServico.CodTipoServico + "'");
            }
            else
            {
                strSQL.AppendFormat(" , {0} ", "NULL");
            }
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.AssociadoCarro.CodAssociadoCarro + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.NumChamado + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.Endereco + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.Numero + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.Uf + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.Cidade + "'");
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.Descricao.Replace(System.Environment.NewLine, "<br />") + "'");
            if (objChamado.Seguradora != null)
            {
                strSQL.AppendFormat(" , {0} ", "'" + objChamado.Seguradora.CodCadastro + "'");
            }
            else
            {
                strSQL.AppendFormat(" , {0} ", "NULL");
            }
            strSQL.AppendFormat(" , {0} ", "'" + objChamado.Prestador.CodCadastro + "'");
            strSQL.AppendFormat(" , {0} ", "'" + string.Format("{0:yyyy-MM-dd}", objChamado.DataCad) + "'");
            strSQL.AppendFormat(" , {0} ", "'" + (Int32)objChamado.Status + "'");
            strSQL.Append("  ); ");
            return DAOHelper.executeDML(strSQL.ToString());
        }
        public static int apagar(Int64 codChamado)
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" DELETE FROM chamado ");
            strSQL.Append(" WHERE ");
            strSQL.Append(" codChamado = ");
            strSQL.AppendFormat("{0}; ", codChamado);
            return DAOHelper.executeDML(strSQL.ToString());
        }
        public static int editar(chamado objChamado)
        {
            StringBuilder strSQL = new StringBuilder();
            strSQL.Append(" UPDATE chamado ");
            strSQL.Append(" SET ");
            strSQL.AppendFormat(" codAssociado = {0} ", "'" + objChamado.Associado.CodAssociado + "'");
            strSQL.AppendFormat(" , codTipoProblema = {0} ", "'" + objChamado.TipoProblema.CodTipoProblema + "'");
            if (objChamado.TipoServico != null)
            {
                strSQL.AppendFormat(" , codTipoServico = {0} ", "'" + objChamado.TipoServico.CodTipoServico + "'");
            }
            else
            {
                strSQL.AppendFormat(" , codTipoServico = {0} ", "NULL");
            }
            strSQL.AppendFormat(" , codAssociadoCarro = {0} ", "'" + objChamado.AssociadoCarro.CodAssociadoCarro + "'");
            //strSQL.AppendFormat(" , numChamado = {0} ", "'" + objChamado.NumChamado + "'");
            strSQL.AppendFormat(" , numero = {0} ", "'" + objChamado.Numero + "'");
            strSQL.AppendFormat(" , uf = {0} ", "'" + objChamado.Uf + "'");
            strSQL.AppendFormat(" , cidade = {0} ", "'" + objChamado.Cidade + "'");
            strSQL.AppendFormat(" , descricao = {0} ", "'" + objChamado.Descricao.Replace(System.Environment.NewLine, "<br />") + "'");
            if (objChamado.Seguradora != null)
            {
                strSQL.AppendFormat(" , codCadastro = {0} ", "'" + objChamado.Seguradora.CodCadastro + "'");
            }
            else
            {
                strSQL.AppendFormat(" , codCadastro = {0} ", "NULL");
            }
            strSQL.AppendFormat(" , codPrestadorServico = {0} ", "'" + objChamado.Prestador.CodCadastro + "'");
            strSQL.AppendFormat(" , status = {0} ", "'" + (Int32)objChamado.Status + "'");
            strSQL.Append(" WHERE ");
            strSQL.AppendFormat(" codChamado = {0}; ", objChamado.CodChamado);
            return DAOHelper.executeDML(strSQL.ToString());
        }
        public static chamado buscar(Int64 codChamado)
        {
            chamado objChamado;
            List<chamado> listaChamado = listar(" codChamado ", codChamado.ToString(), 1);
            if (listaChamado.Count == 1)
            {
                objChamado = listaChamado[0];
            }
            else
            {
                objChamado = null;
            }
            return objChamado;
        }

        public static string proxNumChamado()
        {
            string numChamado = string.Empty;

            string strSQL = " SELECT MAX(numChamado) AS NUM FROM chamado";

            Database db = DatabaseFactory.CreateDatabase("MySql");
            using (IDataReader dr = db.ExecuteReader(CommandType.Text, strSQL))
            {
                while (dr.Read())
                {
                    if (dr["NUM"] == DBNull.Value)
                    {
                        numChamado = "0000000001";
                    }
                    else
                    {
                        numChamado = (Int64.Parse(dr["NUM"].ToString()) + 1).ToString().PadLeft(10, '0');
                    }
                }
            }

            return numChamado;
        }
    }
}